home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-11-04 | 47.8 KB | 1,355 lines |
- (***********************************************************************
-
- :Program. Plot
- :Author. Stefan Köhle
- :Address. Erhardtstr. 10
- W-7033 Herrenberg
- :Phone. 07032/5146
- :shortcut.
- :Version. 1.0
- :Date. 31.12.92
- :Copyright. nix
- :Language. Modula-II.
- :Translator. M2Amiga 4.107d
- :Imports. Formelauswertung,
- FormelausFText by Stefan Salewski (AMOK 11)
- Req.Library by Jürgen Zimmermann (AMOK 55)
- ReqSupport by Jürgen Zimmermann (AMOK 55)
- ReqTools.Library by Nico Francois (AMOK 69)
- ReqTools.def by Kai Bolay (AMOK 69)
- ReqToolsSupport by Frank Lömker (AMOK 69)
- IFFLib by Christian A. Weber (AMOK 18)
- IFFLib.def by Fridtjof Siebert (AMOK 18)
- PlotInit,PlotZeichnen,
- PlotZeichnen2,MyMathLib by myself
-
- :UpDate. -
- :Contents.
- :Remark.
-
- **********************************************************************)
- MODULE Plot ;
-
-
- FROM Formelauswertung IMPORT FFPBerechnung,varListFFP,DefFormel,Formelnummer,
- AssignFFP;
- FROM FormelausFText IMPORT GetFehlertext ;
- FROM ReqSupport IMPORT GetPathFromLock ;
-
- FROM PlotInit IMPORT PlotBasePtr,PlotBase,UpdateMenus,
- Laden,Speichern,WelcheTaste,MenuNummer,ItemNummer,
- CleanUp,SetUp,ScreenHoch,ScreenWeg,
- ArgTesten,FunktionHolen,
- UpdatePb,BildSpeichern,BildLaden,
- Request,YesNoRequest ;
- FROM PlotZeichnen IMPORT RasterZeichnen,RestRaster,BeschriftungZeichnen,
- ClearBitMap,FunktionReinSchreiben,HelpFenster ;
- FROM PlotZeichnen2 IMPORT KastenZeichnen,XAchseZeichnen,
- YAchseZeichnen,RestYAchseZeichnen,
- ZAchseZeichnen,RestXAchseZeichnen ;
- FROM MyMathLib IMPORT IntToReal,RealToInt,IntToFFP,FFPToInt ;
-
-
- IMPORT Arts,DosL ;
- IMPORT IntuitionL ;
- IMPORT InOut ;
- FROM DosD IMPORT FileLockPtr;
- FROM WorkbenchD IMPORT WBStartupPtr;
- FROM Arguments IMPORT NumArgs,GetArg ;
- FROM SYSTEM IMPORT ADDRESS,ADR,FFP,LONGSET ;
- FROM IntuitionL IMPORT ScreenToFront,SetMenuStrip,ClearMenuStrip;
- FROM IntuitionD IMPORT IDCMPFlagSet,menuPick,IntuiMessage,IntuitionBasePtr,
- MenuItem,MenuItemFlags,MenuItemFlagSet,Menu,rawKey,
- IntuiText,WindowPtr ;
- FROM GraphicsL IMPORT Move,Draw,SetAPen,SetDrMd,SetRGB4,AreaMove,
- AreaDraw,AreaEnd,SetBPen,RectFill,Text ;
- FROM GraphicsD IMPORT jam1,GfxBasePtr;
- FROM String IMPORT Length,Compare,Copy ;
- FROM GfxMacros IMPORT SetDrPt,SetOPen ;
-
- FROM ExecL IMPORT GetMsg,ReplyMsg,WaitPort,AllocMem,FreeMem ;
- FROM ExecD IMPORT MemReqSet,MemReqs ;
- FROM LayersL IMPORT ScrollLayer ;
- FROM UtilityD IMPORT tagEnd,TagPtr ;
-
-
-
- CONST BitMapWidth = 1720 ;
- BitMapHeight = 1351 ;
-
- TYPE
-
- Menus = (Menu1,Menu2,Menu3) ;
- Items = (Item1,Item2,Item3,Item4,Item5,Item6,Item7,Item8) ;
- ItemTyp = ARRAY [Menu1..Menu3],[Item1..Item8] OF MenuItem ;
- String = ARRAY[0..20] OF CHAR ;
-
- Variablen = RECORD
- IntuiBase : IntuitionBasePtr ;
- PadFaktorX : FFP ;
- PadFaktorY : FFP ;
- PadHeight : INTEGER ;
- PadWidth : INTEGER ;
- Ende : BOOLEAN ;
- OK : BOOLEAN ;
- Ausstieg : BOOLEAN ;
- NeuBerechnen: BOOLEAN ;
- Argument : BOOLEAN ;
- len : INTEGER ;
- error : INTEGER ;
- fN : CARDINAL ;
- MaxErgebnis : FFP ;
- XNormiert : FFP ;
- YNormiert : FFP ;
- FaktorX : FFP ;
- FaktorY : FFP ;
- FaktorZ : FFP ;
- YWertmax : INTEGER ;
- YWertmin : INTEGER ;
- msg : WBStartupPtr;
- lock : FileLockPtr;
- Item : ItemTyp ;
- MenuStrip : ARRAY [Menu1..Menu3] OF Menu ;
- ItemTexts : ARRAY [Menu1..Menu3],[Item1..Item8] OF
- IntuiText ;
-
- END (* RECORD *) ;
-
-
- VAR
- Pb : PlotBasePtr ; (* alle globalen Variablen *)
- V : POINTER TO Variablen ; (* alle lokalen Variablen *)
-
- k : REAL ;
- x,y : INTEGER ;
- i,j : INTEGER ;
- F : FFP ;
-
-
- PROCEDURE InitMenu(VAR Pb: PlotBasePtr) ; (*********************************)
-
- VAR
-
- SubItem : MenuItem ;
- SubItemText : IntuiText ;
- m : Menus ;
- t : Items ;
-
- BEGIN
-
- WITH V^.MenuStrip[Menu1] DO
- nextMenu := ADR(V^.MenuStrip[Menu2]) ;
- leftEdge := 10 ; width := 70 ;
- topEdge := 0 ; height := 0 ;
- flags := {0} ;
- menuName := ADR('Projekt') ;
- firstItem := ADR(V^.Item[Menu1,Item1]) ;
- END (* WITH *) ;
-
- V^.MenuStrip[Menu2] := V^.MenuStrip[Menu1] ;
-
- WITH V^.MenuStrip[Menu2] DO
- nextMenu := ADR(V^.MenuStrip[Menu3]) ;
- leftEdge := 90 ; width := 100 ;
- menuName := ADR('Auflösung') ;
- firstItem := ADR(V^.Item[Menu2,Item1]) ;
- END (* WITH *) ;
-
- V^.MenuStrip[Menu3] := V^.MenuStrip[Menu1] ;
- WITH V^.MenuStrip[Menu3] DO
- nextMenu := NIL ;
- leftEdge := 190 ; width := 120 ;
- menuName := ADR('Einstellungen') ;
- firstItem := ADR(V^.Item[Menu3,Item1]) ;
- END (* WITH *) ;
-
-
- WITH V^.Item[Menu1,Item1] DO (* allgemein *)
- nextItem := ADR(V^.Item[Menu1,Item2]) ;
- leftEdge := -5 ; topEdge := 0 ;
- height := 20 ; (* 150 *)
- flags := MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled} ;
- mutualExclude := LONGSET{} ;
- itemFill := ADR(V^.ItemTexts[Menu1,Item1]);
- selectFill := NIL ;
- subItem := NIL ;
- END (* WITH *) ;
-
- WITH V^.ItemTexts[Menu1,Item1] DO
- frontPen := 0; backPen := 1 ; drawMode := jam1 ;
- leftEdge := 2; topEdge := 5 ; iTextFont:= NIL ;
- nextText := NIL ;
- END (* WITH *) ;
-
- V^.Item[Menu1,Item1].width := 25*8 ;
- FOR t := Item1 TO Item8 DO
- V^.Item[Menu3,t] := V^.Item[Menu1,Item1] ;
- V^.ItemTexts[Menu3,t] := V^.ItemTexts[Menu1,Item1] ;
- END (* FOR *) ;
-
- V^.Item[Menu1,Item1].width := 15*8 ;
- FOR t := Item1 TO Item8 DO
- V^.Item[Menu2,t] := V^.Item[Menu1,Item1] ;
- V^.ItemTexts[Menu2,t] := V^.ItemTexts[Menu1,Item1] ;
- END (* FOR *) ;
-
- V^.Item[Menu1,Item1].width := 19*8 ;
- FOR t := Item1 TO Item8 DO
- V^.Item[Menu1,t] := V^.Item[Menu1,Item1] ;
- V^.ItemTexts[Menu1,t] := V^.ItemTexts[Menu1,Item1] ;
- END (* FOR *) ;
-
-
- EXCL(V^.Item[Menu1,Item1].flags,checkIt) ;
-
- V^.Item[Menu1,Item2].nextItem := ADR(V^.Item[Menu1,Item3]) ; (* Funktion ändern *)
- V^.Item[Menu1,Item2].topEdge := 21 ;
- EXCL(V^.Item[Menu1,Item2].flags,checkIt) ;
- V^.Item[Menu1,Item2].itemFill := ADR(V^.ItemTexts[Menu1,Item2]) ;
-
- V^.Item[Menu1,Item3].nextItem := ADR(V^.Item[Menu1,Item4]) ;(* Funktion laden*)
- V^.Item[Menu1,Item3].topEdge := 43 ;
- EXCL(V^.Item[Menu1,Item3].flags,checkIt) ;
- V^.Item[Menu1,Item3].itemFill := ADR(V^.ItemTexts[Menu1,Item3]) ;
-
- V^.Item[Menu1,Item4].nextItem := ADR(V^.Item[Menu1,Item5]) ;(*Funktion speichern *)
- V^.Item[Menu1,Item4].topEdge := 65 ;
- EXCL(V^.Item[Menu1,Item4].flags,checkIt) ;
- V^.Item[Menu1,Item4].itemFill := ADR(V^.ItemTexts[Menu1,Item4]) ;
-
- V^.Item[Menu1,Item5].nextItem := ADR(V^.Item[Menu1,Item6]) ;(* Bild speichern *)
- V^.Item[Menu1,Item5].topEdge := 87 ;
- EXCL(V^.Item[Menu1,Item5].flags,checkIt) ;
- V^.Item[Menu1,Item5].itemFill := ADR(V^.ItemTexts[Menu1,Item5]) ;
-
- V^.Item[Menu1,Item6].nextItem := ADR(V^.Item[Menu1,Item7]) ;(* Bild laden *)
- V^.Item[Menu1,Item6].topEdge := 109 ;
- EXCL(V^.Item[Menu1,Item6].flags,checkIt) ;
- EXCL(V^.Item[Menu1,Item6].flags,itemEnabled) ;
- V^.Item[Menu1,Item6].itemFill := ADR(V^.ItemTexts[Menu1,Item6]) ;
-
- V^.Item[Menu1,Item7].nextItem := NIL ; (* Quit *)
- V^.Item[Menu1,Item7].topEdge := 131 ;
- EXCL(V^.Item[Menu1,Item7].flags,checkIt) ;
- V^.Item[Menu1,Item7].itemFill := ADR(V^.ItemTexts[Menu1,Item7]) ;
-
-
- V^.Item[Menu2,Item1].nextItem := ADR(V^.Item[Menu2,Item2]) ; (* lächerlich *)
- V^.Item[Menu2,Item1].flags :=
- MenuItemFlagSet{checkIt,checked,highComp,itemText,itemEnabled} ;
- V^.Item[Menu2,Item1].itemFill := ADR(V^.ItemTexts[Menu2,Item1]) ;
-
- V^.Item[Menu2,Item2].nextItem := ADR(V^.Item[Menu2,Item3]) ; (* gering *)
- V^.Item[Menu2,Item2].topEdge := 21 ;
- V^.Item[Menu2,Item2].flags :=
- MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled} ;
- V^.Item[Menu2,Item2].itemFill := ADR(V^.ItemTexts[Menu2,Item2]) ;
-
- V^.Item[Menu2,Item3].nextItem := ADR(V^.Item[Menu2,Item4]) ; (* mittel *)
- V^.Item[Menu2,Item3].topEdge := 43 ;
- V^.Item[Menu2,Item3].flags :=
- MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled} ;
- V^.Item[Menu2,Item3].itemFill := ADR(V^.ItemTexts[Menu2,Item3]) ;
-
- V^.Item[Menu2,Item4].nextItem := ADR(V^.Item[Menu2,Item5]) ; (* hoch *)
- V^.Item[Menu2,Item4].topEdge := 65 ;
- V^.Item[Menu2,Item4].flags :=
- MenuItemFlagSet{checkIt,highComp,itemText,itemEnabled} ;
- V^.Item[Menu2,Item4].itemFill := ADR(V^.ItemTexts[Menu2,Item4]) ;
-
- V^.Item[Menu2,Item5].nextItem := NIL ; (* noch höher *)
- V^.Item[Menu2,Item5].topEdge := 87 ;
- V^.Item[Menu2,Item5].itemFill := ADR(V^.ItemTexts[Menu2,Item5]) ;
-
-
- V^.Item[Menu3,Item1].nextItem := ADR(V^.Item[Menu3,Item2]) ; (* Raster *)
- V^.Item[Menu3,Item1].itemFill := ADR(V^.ItemTexts[Menu3,Item1]) ;
-
- V^.Item[Menu3,Item2].nextItem := ADR(V^.Item[Menu3,Item3]) ; (* Kasten *)
- V^.Item[Menu3,Item2].topEdge := 21 ;
- V^.Item[Menu3,Item2].itemFill := ADR(V^.ItemTexts[Menu3,Item2]) ;
-
- V^.Item[Menu3,Item3].nextItem := ADR(V^.Item[Menu3,Item4]) ; (* Achsen *)
- V^.Item[Menu3,Item3].topEdge := 43 ;
- V^.Item[Menu3,Item3].itemFill := ADR(V^.ItemTexts[Menu3,Item3]) ;
-
- V^.Item[Menu3,Item4].nextItem := ADR(V^.Item[Menu3,Item5]) ; (* Beschriftung *)
- V^.Item[Menu3,Item4].topEdge := 65 ;
- V^.Item[Menu3,Item4].itemFill := ADR(V^.ItemTexts[Menu3,Item4]) ;
-
- V^.Item[Menu3,Item5].nextItem := ADR(V^.Item[Menu3,Item6]) ; (* Flaeche *)
- V^.Item[Menu3,Item5].topEdge := 87 ;
- V^.Item[Menu3,Item5].itemFill := ADR(V^.ItemTexts[Menu3,Item5]) ;
-
- V^.Item[Menu3,Item6].nextItem := ADR(V^.Item[Menu3,Item7]) ; (* f(x,y) *)
- V^.Item[Menu3,Item6].topEdge := 109 ;
- V^.Item[Menu3,Item6].itemFill := ADR(V^.ItemTexts[Menu3,Item6]) ;
-
- V^.Item[Menu3,Item7].nextItem := ADR(V^.Item[Menu3,Item8]) ; (* kl Bitmap *)
- V^.Item[Menu3,Item7].topEdge := 141 ;
- V^.Item[Menu3,Item7].itemFill := ADR(V^.ItemTexts[Menu3,Item7]) ;
-
- V^.Item[Menu3,Item8].nextItem := NIL ; (* gr Bitmap *)
- V^.Item[Menu3,Item8].topEdge := 163 ;
- IF NOT Pb^.GrosserSpeicher THEN
- EXCL(V^.Item[Menu3,Item8].flags,itemEnabled) ;
- END (* IF *) ;
- V^.Item[Menu3,Item8].itemFill := ADR(V^.ItemTexts[Menu3,Item8]) ;
-
-
- V^.ItemTexts[Menu1,Item1].iText := ADR('neue Funktion') ;
- V^.ItemTexts[Menu1,Item2].iText := ADR('Funktion ändern') ;
- V^.ItemTexts[Menu1,Item3].iText := ADR('Funktion laden') ;
- V^.ItemTexts[Menu1,Item4].iText := ADR('Funktion speichern') ;
- V^.ItemTexts[Menu1,Item5].iText := ADR('Bild speichern') ;
- V^.ItemTexts[Menu1,Item6].iText := ADR('Bild laden') ;
- V^.ItemTexts[Menu1,Item7].iText := ADR('Quit') ;
-
- V^.ItemTexts[Menu2,Item1].iText := ADR(' lächerlich') ;
- V^.ItemTexts[Menu2,Item2].iText := ADR(' gering') ;
- V^.ItemTexts[Menu2,Item3].iText := ADR(' mittel') ;
- V^.ItemTexts[Menu2,Item4].iText := ADR(' hoch') ;
- V^.ItemTexts[Menu2,Item5].iText := ADR(' noch höher') ;
-
- V^.ItemTexts[Menu3,Item1].iText := ADR(' Raster') ;
- V^.ItemTexts[Menu3,Item2].iText := ADR(' Kasten') ;
- V^.ItemTexts[Menu3,Item3].iText := ADR(' Achsen') ;
- V^.ItemTexts[Menu3,Item4].iText := ADR(' Beschriftung') ;
- V^.ItemTexts[Menu3,Item5].iText := ADR(' Fläche') ;
- V^.ItemTexts[Menu3,Item6].iText := ADR(' f(x,y) reinschreiben') ;
- V^.ItemTexts[Menu3,Item7].iText := ADR(' kleine Bitmap') ;
- V^.ItemTexts[Menu3,Item8].iText := ADR(' grosse Bitmap') ;
-
- V^.OK := SetMenuStrip(Pb^.Screen^.firstWindow,ADR(V^.MenuStrip[Menu1])) ;
- IF NOT(V^.OK) THEN
- Request('Menus gehn nicht','Na dann nicht',NIL) ;
- Arts.Terminate ;
- END ;
-
- END InitMenu ;
-
-
- (*-----------------------------------------------------------------------
-
- Hier wird versucht die Procedur SetUp aus PlotInit aufzurufen.
- Falls der Speicher nicht für die große Bitmap langt, wird die
- Sparversion versucht.
-
- -----------------------------------------------------------------------*)
-
-
- PROCEDURE StartUp ; (*******************************************************)
-
- VAR Feler: CARDINAL ;
-
- BEGIN
-
- Feler := SetUp(Pb) ;
-
- IF Feler # 0 THEN
-
- CASE Feler OF
-
- 3,4: IF NOT YesNoRequest(
- 'Der Chipmem langt nur\nfür eine kleine BitMap',
- 'Abbruch|Also gut',NIL) THEN
-
- Arts.Terminate ; (* Abbruch *)
- END (* IF *) ;
-
- ELSE
- IF NOT YesNoRequest('Der Speicher langt nur\nfür eine kleine BitMap',
- 'Abbruch|Also gut',NIL) THEN
-
- Arts.Terminate ; (* Abbruch *)
- END (* IF *) ;
- END (* CASE *) ;
-
- Pb^.GrosserSpeicher := FALSE ;
- Pb^.GrosseBitmap := FALSE ;
-
- Feler := SetUp(Pb) ;
-
- IF Feler # 0 THEN
-
- CleanUp(Pb) ;
-
- CASE Feler OF
- 2: Request("Kein Speicher für BitmapPtr","Mist",NIL) ; |
- 3: Request("Kein Speicher für Bitplane","Mist",NIL) ; |
- 4: Request("Kein Speicher für TempRas","Mist",NIL) ; |
- 5: Request("Screen geht nicht auf","Mist",NIL) ; |
- 6: Request("Window geht nicht auf","Mist",NIL) ; |
- 7: Request("Kein Speicher für Variablen","Mist",NIL) ;
- ELSE
- Request("Unbekannter Fehler ???","Kaum zu glauben",NIL) ;
-
- END (* CASE *);
-
- Arts.Terminate ;
- END (* IF *) ;
- END ;
-
- InitMenu(Pb) ;
- END StartUp ;
-
-
-
-
-
- PROCEDURE f(x: FFP; y: FFP ): FFP ; (***********************************)
-
- VAR Ergebnis: FFP ;
-
- BEGIN
- varListFFP['x']:= x ;
- varListFFP['y']:= y ;
- FFPBerechnung(2,Ergebnis,V^.fN) ;
-
- IF Ergebnis > V^.MaxErgebnis THEN
- Ergebnis := V^.MaxErgebnis ;
- ELSIF Ergebnis < -V^.MaxErgebnis THEN
- Ergebnis := -V^.MaxErgebnis ;
- END ;
-
- RETURN Ergebnis ;
-
- END f ;
-
-
- PROCEDURE CheckMessage ; (***************************************************)
-
- VAR
- mousex,mousey,
- XScroll,YScroll : INTEGER ;
- IntuiMsg : POINTER TO IntuiMessage;
- class : IDCMPFlagSet ;
- code : CARDINAL ;
- Taste : CARDINAL ;
-
- Rest : FFP ;
- Rest2,Rest3 : FFP ;
-
- BEGIN
- IntuiMsg := GetMsg(Pb^.Screen^.firstWindow^.userPort) ;
- WHILE IntuiMsg # NIL DO
- class := IntuiMsg^.class ;
- code := IntuiMsg^.code ;
- ReplyMsg(IntuiMsg) ;
-
- IF NOT Pb^.GrosseBitmap THEN
- IF (rawKey IN class) THEN
- Taste := WelcheTaste(code);
- IF NOT (Taste = 0) THEN
- CASE Taste OF
- 280,278 : V^.Ende := TRUE ; | (* ESC,Ctrl C *)
-
- 281 : (* Help *)
- IF HelpFenster(Pb) THEN END ;
- |
-
- 260 : (* Cursor rauf *)
-
- Pb^.B.YHinten := Pb^.B.YHinten+0.5*Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 261 : (* Shift rauf *)
-
- Pb^.B.YHinten := Pb^.B.YHinten+Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 262 : (* Alt rauf *)
-
- Pb^.B.YHinten := Pb^.B.YHinten+3.0*Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 265 : (* Cursor runter *)
-
- Pb^.B.YHinten := Pb^.B.YHinten-0.5*Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 266 : (* Shift runter *)
-
- Pb^.B.YHinten := Pb^.B.YHinten-Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 267 : (* Alt runter *)
-
- Pb^.B.YHinten := Pb^.B.YHinten-3.0*Pb^.B.DeltaY ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 270,314 : (* Cursor links,4 *)
-
- Pb^.B.XLinks := Pb^.B.XLinks+0.5*Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 271,324 : (* Shift links,4*)
-
- Pb^.B.XLinks := Pb^.B.XLinks+Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 272,334 : (* Alt links,4 *)
-
- Pb^.B.XLinks := Pb^.B.XLinks+4.0*Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 275,316 : (* Cursor rechts,6 *)
-
- Pb^.B.XLinks := Pb^.B.XLinks-0.5*Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 276,326 : (* Shift rechts,6 *)
-
- Pb^.B.XLinks := Pb^.B.XLinks-Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 277,336 : (* Alt rechts,6 *)
-
- Pb^.B.XLinks := Pb^.B.XLinks-4.0*Pb^.B.DeltaX ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 318 : (* 8 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben-0.5*Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 328 : (* SHIFT 8 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben-Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 338 : (* ALT 8 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben-4.0*Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 312 : (* 2 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben+0.5*Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 322 : (* SHIFT 2 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben+Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 332 : (* ALT 2 *)
-
- Pb^.B.ZOben := Pb^.B.ZOben+4.0*Pb^.B.DeltaZ ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 291,301 : (* F1,1 : Zoom in *)
-
- Pb^.B.XLinks := Pb^.B.XLinks+Pb^.B.DeltaX ;
- Pb^.B.DeltaX := Pb^.B.DeltaX * 0.5 ;
-
- Pb^.B.YHinten:= Pb^.B.YHinten +0.75*Pb^.B.DeltaY ;
- Pb^.B.DeltaY := Pb^.B.DeltaY * 0.5 ;
-
- Pb^.B.ZOben := Pb^.B.ZOben -Pb^.B.DeltaZ ;
- Pb^.B.DeltaZ := Pb^.B.DeltaZ * 0.5 ;
-
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 292,302 : (* F2,2 Zoom in X *)
-
- Pb^.B.XLinks := Pb^.B.XLinks+Pb^.B.DeltaX ;
- Pb^.B.DeltaX := Pb^.B.DeltaX * 0.5 ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 293,303 : (* F3,3 Zoom in Y *)
- Pb^.B.YHinten:= Pb^.B.YHinten +0.75*Pb^.B.DeltaY ;
- Pb^.B.DeltaY := Pb^.B.DeltaY * 0.5 ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 294,304 : (* F4,4 Zoom in Z *)
- Pb^.B.ZOben := Pb^.B.ZOben -Pb^.B.DeltaZ ;
- Pb^.B.DeltaZ := Pb^.B.DeltaZ * 0.5 ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 295,305 : | (* F5,5 Nix *)
-
- 296,306 : (* F6,6 : Zoom out *)
- Pb^.B.DeltaX := Pb^.B.DeltaX * 2.0 ;
- Pb^.B.XLinks := Pb^.B.XLinks-Pb^.B.DeltaX ;
- Rest := 2.0*Pb^.B.XLinks/Pb^.B.DeltaX ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaX*Rest2 ;
- Pb^.B.XLinks := Pb^.B.XLinks - Rest3 ;
-
- Pb^.B.DeltaY := Pb^.B.DeltaY * 2.0 ;
- Pb^.B.YHinten := Pb^.B.YHinten-0.75*Pb^.B.DeltaY ;
- Rest := 2.0*Pb^.B.YHinten/Pb^.B.DeltaY ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaY*Rest2 ;
- Pb^.B.YHinten := Pb^.B.YHinten - Rest3 ;
-
- Pb^.B.DeltaZ := Pb^.B.DeltaZ * 2.0 ;
- Pb^.B.ZOben := Pb^.B.ZOben+Pb^.B.DeltaZ ;
- Rest := 2.0*Pb^.B.ZOben/Pb^.B.DeltaZ ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaZ*Rest2 ;
- Pb^.B.ZOben := Pb^.B.ZOben - Rest3 ;
-
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 297,307 : (* F7,7 Zoom out X *)
- Pb^.B.DeltaX := Pb^.B.DeltaX * 2.0 ;
- Pb^.B.XLinks := Pb^.B.XLinks-Pb^.B.DeltaX ;
- Rest := 2.0*Pb^.B.XLinks/Pb^.B.DeltaX ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaX*Rest2 ;
- Pb^.B.XLinks := Pb^.B.XLinks - Rest3 ;
-
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 298,308 : (* F8,8 Zoom out Y *)
- Pb^.B.DeltaY := Pb^.B.DeltaY * 2.0 ;
- Pb^.B.YHinten := Pb^.B.YHinten-0.75*Pb^.B.DeltaY ;
- Rest := 2.0*Pb^.B.YHinten/Pb^.B.DeltaY ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaY*Rest2 ;
- Pb^.B.YHinten := Pb^.B.YHinten - Rest3 ;
-
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 299,309 : (* F9,9 Zoom out Z *)
- Pb^.B.DeltaZ := Pb^.B.DeltaZ * 2.0 ;
- Pb^.B.ZOben := Pb^.B.ZOben+Pb^.B.DeltaZ ;
- Rest := 2.0*Pb^.B.ZOben/Pb^.B.DeltaZ ;
- Rest2 := Rest-IntToFFP(TRUNC(Rest)) ;
- Rest3 := 0.5*Pb^.B.DeltaZ*Rest2 ;
- Pb^.B.ZOben := Pb^.B.ZOben - Rest3 ;
-
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- 300,310 : (* F10,10 Reset *)
- Pb^.B.XLinks := 0.0;
- Pb^.B.DeltaX := 1.0 ;
- Pb^.B.YHinten := 0.0 ;
- Pb^.B.DeltaY := 1.0 ;
- Pb^.B.ZOben := 2.0 ;
- Pb^.B.DeltaZ := 1.0 ;
- V^.Ausstieg := TRUE ; V^.NeuBerechnen := TRUE ; |
-
- ELSE
- END (* CASE *);
- END (* IF NOT Taste *) ;
- END (* IF rawKey *);
- ELSE
- IF (rawKey IN class) THEN
- Taste := WelcheTaste(code);
- IF (Taste = 280) OR (Taste = 278) THEN
- V^.Ende := TRUE ;
- END ;
- END (* IF rawKey *) ;
- END (* IF kleine Bitmap *) ;
-
-
- IF (menuPick IN class) THEN
- CASE MenuNummer(code) OF
- 0: (* Projekt *)
- CASE ItemNummer(code) OF
-
- 0: (* Neue Funktion *)
- IF FunktionHolen(Pb,FALSE,TRUE) THEN
- V^.Ausstieg := TRUE;
- V^.NeuBerechnen := TRUE ;
- Pb^.BildName := Pb^.FunktionName ;
- Pb^.GrosseBitmap := FALSE ;
- Pb^.B.XLinks := 0.0;
- Pb^.B.DeltaX := 1.0 ;
- Pb^.B.YHinten := 0.0 ;
- Pb^.B.DeltaY := 1.0 ;
- Pb^.B.ZOben := 2.0 ;
- Pb^.B.DeltaZ := 1.0 ;
- Pb^.Schritt := 6 ;
- UpdateMenus(Pb,2) ;
- UpdateMenus(Pb,3) ;
- UpdatePb(Pb) ;
- IF Pb^.GrosserSpeicher THEN
- ScrollLayer(Pb^.Layer,-Pb^.Layer^.scrollX,
- -Pb^.Layer^.scrollY) ;
- END (* IF *) ;
- END (*IF*); |
-
- 1: IF FunktionHolen(Pb,FALSE,FALSE) THEN (* Funktion ändern *)
- V^.Ausstieg := TRUE ;
- V^.NeuBerechnen := TRUE ;
- END (*IF*) ; |
-
- 2: IF Laden(Pb,TRUE) THEN (* Funktion laden *)
-
- IF FunktionHolen(Pb,TRUE,FALSE) THEN
- Pb^.GrosseBitmap := FALSE ;
- UpdateMenus(Pb,2) ;
- UpdateMenus(Pb,3) ;
- UpdatePb(Pb) ;
- IF Pb^.GrosserSpeicher THEN
- ScrollLayer(Pb^.Layer,-Pb^.Layer^.scrollX,
- -Pb^.Layer^.scrollY) ;
- END (* IF *) ;
- V^.Ausstieg := TRUE;
- V^.NeuBerechnen := TRUE ;
- Pb^.BildName := Pb^.FunktionName ;
- ELSE
- Pb^.Funktion := Pb^.LetzteFunktion ;
- V^.Ausstieg := TRUE;
- END (* IF FunktionHolen*) ;
-
- END (* IF Laden *); |
-
- 3: V^.OK := Speichern(Pb) | (* Funktion speichern *)
-
- 4: BildSpeichern(Pb) ; | (* Bild speichern *)
-
- 5: V^.error := BildLaden(Pb); (* Bild laden *)
- CASE V^.error OF
- -1: | (* cancel *)
- 0 : | (* alles OK *)
- 1 : Request("Kein Speicher fuer BitmapPtr","Mist",NIL)|
- 16: Request("File not found","Mist",NIL) |
- 17: Request("Read error","Mist",NIL) |
- 18: Request("Zu wenig Pufferspeicher","Mist",NIL) |
- 19: Request("Kein IFF File","Mist",NIL) |
- 24: Request("Kein ILBM File","Mist",NIL) |
- 25: Request("BitMapHeader fehlt","Mist",NIL) |
- 26: Request("BODY Chunk fehlt","Mist",NIL) |
- 27: Request("Bild hat zu viele Bitplanes","Mist",NIL) |
- 28: Request("Unbekannter Kompressions Typ","Sowas",NIL)|
-
- ELSE
- END (* CASE *) |
-
- 6: V^.Ende := TRUE; |
- END (* CASE *) ; |
-
- 1: (* Auflösung *)
- CASE ItemNummer(code) OF
- (* lächerlich *) 0: Pb^.Schritt := 6; V^.Ausstieg := TRUE ;
- UpdateMenus(Pb,2) |
-
- (* gering *) 1: Pb^.Schritt := 4; V^.Ausstieg := TRUE ;
- UpdateMenus(Pb,2) |
-
- (* mittel *) 2: Pb^.Schritt := 3; V^.Ausstieg := TRUE ;
- UpdateMenus(Pb,2) |
-
- (* hoch *) 3: Pb^.Schritt := 2; V^.Ausstieg := TRUE ;
- UpdateMenus(Pb,2) |
-
- (* noch höher *) 4: Pb^.Schritt := 1; V^.Ausstieg := TRUE ;
- UpdateMenus(Pb,2) |
-
- END (* CASE *) ; |
-
- 2: (* Einstellungen *)
- CASE ItemNummer(code) OF
-
- (* Raster *) 0: IF Pb^.Raster THEN (* Raster ausschalten *)
- V^.Ausstieg := TRUE ;
- Pb^.Raster := FALSE ;
- UpdateMenus(Pb,3) ;
- ELSE (* Raster einschalten *)
- Pb^.Raster := TRUE ;
- Pb^.Kasten := TRUE ;
- UpdateMenus(Pb,3) ;
- IF Pb^.Flaeche THEN
- V^.Ausstieg := TRUE ;
- ELSE
- KastenZeichnen(Pb) ;
- RasterZeichnen(Pb);
- IF Pb^.fertig THEN
- RestRaster(Pb) ;
- END ;
- END ;
- END (* IF *) |
-
- (* Kasten *) 1: IF Pb^.Kasten THEN (* Kasten ausschalten *)
- V^.Ausstieg := TRUE ;
- Pb^.Kasten := FALSE ;
- Pb^.Raster := FALSE ;
- Pb^.Beschriftung := FALSE ;
- UpdateMenus(Pb,3) ;
- ELSE
- Pb^.Kasten := TRUE ; (* Kasten einschalten *)
- UpdateMenus(Pb,3) ;
- IF Pb^.Flaeche THEN
- V^.Ausstieg := TRUE ;
- ELSE
- KastenZeichnen(Pb) ;
- END ;
- END (* IF *) |
-
- (* Achsen *) 2: IF Pb^.Achsen THEN
- V^.Ausstieg := TRUE ;
- Pb^.Achsen := FALSE ;
- UpdateMenus(Pb,3) ;
- ELSE
- V^.Ausstieg := TRUE ;
- Pb^.Achsen := TRUE ;
- UpdateMenus(Pb,3) ;
- XAchseZeichnen(Pb) ; RestXAchseZeichnen(Pb) ;
- YAchseZeichnen(Pb) ; RestYAchseZeichnen(Pb) ;
- ZAchseZeichnen(Pb) ;
- END (* IF *) |
-
- (*Beschriftung*) 3: IF Pb^.Beschriftung THEN (* Beschriftung aus *)
- V^.Ausstieg := TRUE ;
- Pb^.Beschriftung := FALSE ;
- UpdateMenus(Pb,3) ;
- ELSE
- Pb^.Beschriftung := TRUE ; (* Beschriftung ein *)
- Pb^.Kasten := TRUE ;
- UpdateMenus(Pb,3) ;
- BeschriftungZeichnen(Pb) ;
- IF Pb^.Flaeche THEN
- V^.Ausstieg := TRUE ;
- ELSE
- KastenZeichnen(Pb) ;
- END ;
- END (* IF *) ; |
-
- (* Flaeche *) 4: V^.Ausstieg := TRUE ;
- IF Pb^.Flaeche THEN
- Pb^.Flaeche := FALSE ;
- ELSE
- Pb^.Flaeche := TRUE ;
- END ;
- UpdateMenus(Pb,3) ; |
-
- (* f(x,y) *) 5: IF Pb^.FSchreiben THEN (* f(x,y) löschen *)
- Pb^.FSchreiben := FALSE ;
- FunktionReinSchreiben(Pb,TRUE) ;
- ELSE
- Pb^.FSchreiben := TRUE ;
- FunktionReinSchreiben(Pb,FALSE) ;
- END ;
- UpdateMenus(Pb,3) ; |
-
-
- (*kleine Bmp*) 6: IF Pb^.GrosseBitmap THEN (* Umschalten auf kleine *)
- V^.Ausstieg := TRUE ;
- Pb^.GrosseBitmap := FALSE ;
- Pb^.KastenX0 := 160 ;
- Pb^.KastenY0 := 46 ;
- UpdateMenus(Pb,3) ;
- UpdateMenus(Pb,2) ;
- IF Pb^.GrosserSpeicher THEN
- ScrollLayer(Pb^.Layer,-Pb^.Layer^.scrollX,
- -Pb^.Layer^.scrollY) ;
- END (* IF *) ;
- END ; |
-
- (* gr Bmp *) 7: IF NOT Pb^.GrosseBitmap THEN (* Umschalten auf grosse *)
- IF Pb^.Schritt = 4 THEN
- Pb^.Schritt := 3 ;
- END ;
- V^.Ausstieg := TRUE ;
- Pb^.GrosseBitmap := TRUE ;
- Pb^.KastenX0 := 450 ;
- Pb^.KastenY0 := 138 ;
- UpdateMenus(Pb,3) ;
- UpdateMenus(Pb,2) ;
- END ; |
-
- END (* CASE *) ;
- ELSE
-
- END (* CASE *) ;
-
- END (* IF menuPick *) ;
-
- IntuiMsg := GetMsg(Pb^.Screen^.firstWindow^.userPort) ;
- END (* WHILE *) ;
-
-
- IF Pb^.GrosseBitmap THEN
-
- IF V^.IntuiBase^.activeScreen = Pb^.Screen THEN
-
- mousex := Pb^.Screen^.firstWindow^.mouseX ;
- mousey := Pb^.Screen^.firstWindow^.mouseY ;
-
- IF (mousex # Pb^.oldX) OR (mousey # Pb^.oldY) THEN
-
- IF (mousex < Pb^.ScreenWidth-100) AND (mousex > 100) THEN
- XScroll := FFPToInt(IntToFFP(mousex-100)*V^.PadFaktorX) ;
- ELSE IF mousex <= 100 THEN
- XScroll:= 0 ;
- ELSE
- XScroll := BitMapWidth - Pb^.ScreenWidth ;
- END (* IF *) ;
- END (* IF *) ;
-
- IF (mousey < Pb^.ScreenHeight-100) AND (mousey > 100) THEN
- YScroll := FFPToInt(IntToFFP(mousey-100)*V^.PadFaktorY) ;
- ELSE IF mousey <= 100 THEN
- YScroll := 0 ;
- ELSE
- YScroll := BitMapHeight - Pb^.ScreenHeight ;
- END (* IF *) ;
- END (* IF *) ;
-
- ScrollLayer(Pb^.Layer,
- XScroll-Pb^.Layer^.scrollX,
- YScroll-Pb^.Layer^.scrollY) ;
-
- Pb^.oldX := mousex ;
- Pb^.oldY := mousey ;
-
- END (* IF Screen=firstScreen *)
- END (* IF *) ;
- END (* IF *) ;
-
- END CheckMessage ;
-
-
- PROCEDURE RFehler ; (******************************************************)
-
- BEGIN
- CASE V^.fN OF
- 3..105 : Pb^.Wert[x,y].YWert := Pb^.KastenY0+2*y |
-
- END (* CASE *) ;
-
- END RFehler ;
-
-
-
- PROCEDURE Zeichnen ; (*************************************************)
-
- CONST MaxInt = 32767.0 ;
-
- VAR z0: INTEGER ;
- XWert,YWert : FFP ;
- P1x,P1y : INTEGER ;
-
- BEGIN
-
- V^.Ausstieg := FALSE ; i := 0 ;
- IF V^.NeuBerechnen THEN
- V^.NeuBerechnen := FALSE ;
- Pb^.fertig := FALSE ;
- END ;
-
- IF NOT Pb^.GrosseBitmap THEN (* kleine Bitmap *)
- V^.FaktorX := 3.0*Pb^.B.DeltaX/72.0 ;
- V^.FaktorY := 3.0*Pb^.B.DeltaY/72.0 ;
- V^.FaktorZ := 60.0/Pb^.B.DeltaZ ;
- z0 := FFPToInt(Pb^.B.ZOben/Pb^.B.DeltaZ *60.0) ;
- Pb^.ymax := 72 ;
- V^.YWertmax:= 46 ;
- V^.YWertmin:= 286 ;
- Pb^.xmax := 96 ;
- P1x := -144 ;
- P1y := 144 ;
- ELSE (* grosse Bitmap *)
- V^.FaktorX := Pb^.B.DeltaX/72.0 ;
- V^.FaktorY := Pb^.B.DeltaY/72.0 ;
- V^.FaktorZ := 180.0/Pb^.B.DeltaZ ;
- z0 := 3*FFPToInt(Pb^.B.ZOben/Pb^.B.DeltaZ *60.0) ;
- Pb^.ymax := 216 ;
- V^.YWertmax:= 46*3 ;
- V^.YWertmin:= 286*3 ;
- Pb^.xmax := 288 ;
- P1x := -432 ;
- P1y := 432 ;
- END (* IF *) ;
-
- V^.MaxErgebnis := MaxInt/V^.FaktorZ ;
-
- IF NOT (V^.Ausstieg OR V^.Ende) THEN (* erste Spalte *)
- y := 0;
-
- WHILE y <= Pb^.ymax DO
-
- V^.XNormiert:=Pb^.B.XLinks;
- V^.YNormiert:=IntToFFP(y)*V^.FaktorY+Pb^.B.YHinten ;
-
- WITH Pb^.Wert[0,y] DO
- XWert := Pb^.KastenX0-2*y ;
- F := f(V^.XNormiert,V^.YNormiert) ;
-
- IF V^.fN =0 THEN
- YWert := Pb^.KastenY0+2*y-FFPToInt(V^.FaktorZ*F)+z0 ;
- IF YWert < V^.YWertmax+2*y THEN
- YWert := V^.YWertmax+2*y
- END ;
- IF YWert > V^.YWertmin+2*y THEN
- YWert := V^.YWertmin+2*y
- END ;
- ELSE
- RFehler ;
- END (* IF *) ;
-
- CheckMessage ;
- IF (V^.Ausstieg OR V^.Ende) THEN
- y := Pb^.ymax+10 ;
- END (* IF *) ;
-
- END (* WITH *) ;
-
- y:=y+Pb^.Schritt ;
-
- END (* WHILE *) ;
- END (* IF *) ;
-
-
- IF NOT (V^.Ausstieg OR V^.Ende) THEN (* Erste Zeile *)
- x := 0 ; y := 0 ;
-
- WHILE x <= Pb^.xmax DO
-
- V^.XNormiert := IntToFFP(x)*V^.FaktorX+Pb^.B.XLinks;
- V^.YNormiert := Pb^.B.YHinten ;
-
- WITH Pb^.Wert[x,0] DO
- XWert := 4*x+Pb^.KastenX0 ;
- F := f(V^.XNormiert,V^.YNormiert) ;
-
-
- IF V^.fN = 0 THEN
- YWert := Pb^.KastenY0-FFPToInt(V^.FaktorZ*F)+z0 ;
-
- IF YWert < V^.YWertmax+2*y THEN
- YWert := V^.YWertmax+2*y
- END ;
- IF YWert > V^.YWertmin+2*y THEN
- YWert := V^.YWertmin+2*y
- END ;
-
- ELSE
- RFehler ;
- END (* IF *) ;
-
- IF x = 0 THEN
- Move(Pb^.Rp,Pb^.Wert[0,0].XWert,Pb^.Wert[0,0].YWert) ;
- ELSE
- Draw(Pb^.Rp,Pb^.Wert[x,0].XWert,Pb^.Wert[x,0].YWert) ;
- END (* IF *) ;
- i := i+1 ;
- IF i > 10 THEN
- CheckMessage ; i := 0 ;
- END (* IF *) ;
- IF (V^.Ausstieg OR V^.Ende) THEN
- x := Pb^.xmax+10 ;
- END (* IF *) ;
-
- END (* WITH *) ;
- x := x+Pb^.Schritt ;
-
- END (* WHILE *) ;
- END (* IF *) ;
-
-
- IF NOT (V^.Ausstieg OR V^.Ende) THEN (* Rest *)
- y:=Pb^.Schritt ;
-
- WHILE y <= Pb^.ymax DO
-
- x:= Pb^.Schritt ;
-
- Move(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].XWert,
- Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].YWert);
- Draw(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y].XWert,Pb^.Wert[x-Pb^.Schritt,y].YWert) ;
-
- WHILE x <= Pb^.xmax DO
-
- V^.XNormiert:=IntToFFP(x)*V^.FaktorX+Pb^.B.XLinks;
- V^.YNormiert:=IntToFFP(y)*V^.FaktorY+Pb^.B.YHinten ;
-
- WITH Pb^.Wert[x,y] DO
- XWert := 4*x+Pb^.KastenX0-2*y ;
- F := f(V^.XNormiert,V^.YNormiert) ;
-
- IF V^.fN = 0 THEN
- YWert := Pb^.KastenY0+2*y-FFPToInt(V^.FaktorZ*F)+z0 ;
- IF YWert < V^.YWertmax+2*y THEN
- YWert := V^.YWertmax+2*y
- END ;
- IF YWert > V^.YWertmin+2*y THEN
- YWert := V^.YWertmin+2*y
- END ;
- ELSE
- RFehler ;
- END (* IF *) ;
- END (* WITH *) ;
-
-
- IF Pb^.Flaeche THEN
- SetBPen(Pb^.Rp,1) ;
- SetAPen(Pb^.Rp,0) ;
- V^.OK := AreaMove(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].XWert,
- Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].YWert) ;
- V^.OK := AreaDraw(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert,
- Pb^.Wert[x,y-Pb^.Schritt].YWert) ;
- V^.OK := AreaDraw(Pb^.Rp,Pb^.Wert[x,y].XWert,
- Pb^.Wert[x,y].YWert) ;
- V^.OK := AreaDraw(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y].XWert,
- Pb^.Wert[x-Pb^.Schritt,y].YWert) ;
- V^.OK := AreaEnd(Pb^.Rp) ;
- SetAPen(Pb^.Rp,1) ;
- Move(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y].XWert,
- Pb^.Wert[x-Pb^.Schritt,y].YWert) ;
- Draw(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].XWert,
- Pb^.Wert[x-Pb^.Schritt,y-Pb^.Schritt].YWert) ;
- Draw(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert,
- Pb^.Wert[x,y-Pb^.Schritt].YWert) ;
- END (* IF *) ;
-
- Move(Pb^.Rp,Pb^.Wert[x-Pb^.Schritt,y].XWert,
- Pb^.Wert[x-Pb^.Schritt,y].YWert) ;
- Draw(Pb^.Rp,Pb^.Wert[x,y].XWert,
- Pb^.Wert[x,y].YWert) ;
- Draw(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert,
- Pb^.Wert[x,y-Pb^.Schritt].YWert) ;
-
- IF Pb^.Achsen THEN
- IF x = Pb^.A.XNull/4 THEN (* YAchse *)
-
- SetAPen(Pb^.Rp,0) ; (* Hintergrundfarbe *)
-
- Move(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert-2,
- Pb^.KastenY0+Pb^.A.ZNull+2*(y-Pb^.Schritt)+1) ;
- Draw(Pb^.Rp,Pb^.KastenX0+P1x+Pb^.A.XNull-2,
- Pb^.KastenY0+P1y+Pb^.A.ZNull+1) ;
- Move(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert-3,
- Pb^.KastenY0+Pb^.A.ZNull+2*(y-Pb^.Schritt)+1) ;
- Draw(Pb^.Rp,Pb^.KastenX0+P1x+Pb^.A.XNull-3,
- Pb^.KastenY0+P1y+Pb^.A.ZNull+1) ;
-
- Move(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert-2,
- Pb^.KastenY0+Pb^.A.ZNull+2*(y-Pb^.Schritt)+3) ;
- Draw(Pb^.Rp,Pb^.KastenX0+P1x+Pb^.A.XNull-2,
- Pb^.KastenY0+P1y+Pb^.A.ZNull+3) ;
- Move(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert-1,
- Pb^.KastenY0+Pb^.A.ZNull+2*(y-Pb^.Schritt)+3) ;
- Draw(Pb^.Rp,Pb^.KastenX0+P1x+Pb^.A.XNull-1,
- Pb^.KastenY0+P1y+Pb^.A.ZNull+3) ;
-
-
- SetAPen(Pb^.Rp,1) ; (* Vordergrundfarbe *)
-
- Move(Pb^.Rp,Pb^.Wert[x,y-Pb^.Schritt].XWert,
- Pb^.KastenY0+Pb^.A.ZNull+2*(y-Pb^.Schritt)) ;
- Draw(Pb^.Rp,Pb^.KastenX0+P1x+Pb^.A.XNull,
- Pb^.KastenY0+P1y+Pb^.A.ZNull) ;
-
- RestYAchseZeichnen(Pb) ;
- END ;
-
- END ;
-
- x := x+Pb^.Schritt ;
- i := i+1 ;
- IF i > 5 THEN
- CheckMessage ; i := 0 ;
- END (* IF *) ;
- IF (V^.Ende OR V^.Ausstieg) THEN
- x := Pb^.xmax+10;
- END (* IF *) ;
-
- END (* WHILE *) ;
-
- IF Pb^.Achsen THEN
- IF 2*y < Pb^.A.YNull+2*Pb^.Schritt THEN (* X,Z-Achse *)
- XAchseZeichnen(Pb) ; ZAchseZeichnen(Pb) ;
- RestXAchseZeichnen(Pb) ; RestYAchseZeichnen(Pb) ;
- END ;
- END ;
-
- y := y+Pb^.Schritt ;
- IF (V^.Ende OR V^.Ausstieg) THEN
- y := Pb^.ymax+10;
- END (* IF *) ;
-
- END (* WHILE *) ;
- END (* IF *) ;
-
- Pb^.fertig := TRUE ;
-
-
- END Zeichnen ;
-
-
-
-
-
- BEGIN (* Haupt *) (***************************************************)
-
- Pb := AllocMem(SIZE(PlotBase),MemReqSet{public,memClear}) ;
- IF Pb = NIL THEN
- Request('Kein Speicher für PlotBase',"Zu dumm",NIL) ;
- Arts.Terminate ;
- END ;
-
- V := AllocMem(SIZE(Variablen),MemReqSet{public,memClear}) ;
- IF V = NIL THEN
- Request('Kein Speicher für Variablen',"Booa ey",NIL) ;
- Arts.Terminate ;
- END ;
-
- IF (Arts.wbStarted) THEN
- V^.msg:=Arts.startupMsg;
- V^.lock:=V^.msg^.argList^[0].lock;
- IF (V^.lock # NIL) THEN
- GetPathFromLock(Pb^.Dir,V^.lock);
- END; (* IF *)
- ELSE
- GetPathFromLock(Pb^.Dir,Arts.oldCurrentDir);
- IF Length(Pb^.Dir) = 0 THEN
- Pb^.Dir := "SYS:" ;
- END ;
- END; (* IF *)
-
- Copy(Pb^.DirBilder,Pb^.Dir) ;
-
- IF NumArgs() >0 THEN
- GetArg(1,Pb^.Funktion,V^.len) ;
- IF Compare(Pb^.Funktion,"?")=0 THEN (* Fragezeichen übergeben *)
- InOut.WriteString('Plot V1.0 vom 16.10.92\n') ;
- InOut.WriteString('Stefan Köhle\n') ;
- InOut.WriteString('Erhardtstr. 10\n7033 Herrenberg\n') ;
- Arts.Terminate ;
- END ;
- V^.Argument := TRUE ; (* Argument vorhanden *)
-
- END ;
-
-
- V^.IntuiBase := ADR(IntuitionL) ;
-
- Pb^.Flaeche := TRUE ; Pb^.Raster := TRUE ; Pb^.FSchreiben := TRUE ;
- Pb^.GrosserSpeicher := TRUE ; Pb^.Kasten := TRUE ; Pb^.Achsen := TRUE ;
- Pb^.GrosseBitmap := FALSE ;Pb^.Beschriftung := TRUE ;
- Pb^.oldX := 0; Pb^.oldY := 0 ;
-
- Pb^.FaktorX:=0.1; Pb^.FaktorY:=0.1; Pb^.FaktorZ:= 50.0 ;
- Pb^.Schritt := 6;
- Pb^.B.XLinks := 0.0 ;
- Pb^.B.DeltaX := 1.0 ;
- Pb^.B.YHinten := 0.0 ;
- Pb^.B.DeltaY := 1.0 ;
- Pb^.B.ZOben := 2.0 ;
- Pb^.B.DeltaZ := 1.0 ;
- Pb^.KastenX0 := 160 ;
- Pb^.KastenY0 := 46 ;
- Pb^.LetzteFunktion := '0' ;
- Pb^.fertig := FALSE ;
-
- StartUp ;
-
- Pb^.Rp := Pb^.Screen^.firstWindow^.rPort ;
-
- (* Berechnungen für Scrollerei *)
-
- V^.PadHeight:= Pb^.ScreenHeight-200 ;
- V^.PadWidth:= Pb^.ScreenWidth-200 ;
- V^.PadFaktorX := IntToFFP(BitMapWidth-Pb^.ScreenWidth)/IntToFFP(V^.PadWidth);
- V^.PadFaktorY := IntToFFP(BitMapHeight-Pb^.ScreenHeight)/IntToFFP(V^.PadHeight) ;
-
-
- V^.Ende := FALSE ;
- V^.Ausstieg := TRUE ;
- V^.NeuBerechnen := TRUE ;
- ClearBitMap(Pb) ;
- ScreenHoch(Pb^.Screen) ;
- Pb^.BildName := 'Bild' ;
-
-
- IF NOT ArgTesten(Pb,V^.Argument) THEN
-
- IF V^.Argument THEN (* cancel beim StringRequester *)
-
- IF NOT Laden(Pb,TRUE) THEN (* war nix mit Laden *)
- Pb^.Funktion := "0" ; (* Defaultfunktion *)
- Pb^.FunktionName := '';
- V^.OK := FunktionHolen(Pb,TRUE,FALSE) ;
- END ;
- ELSE (* kein Argument übergeben *)
-
-
- IF NOT FunktionHolen(Pb,FALSE,TRUE) THEN
- IF NOT Laden(Pb,TRUE) THEN (* war nix mit Laden *)
- Pb^.Funktion := "0" ; (* Defaultfunktion *)
- Pb^.FunktionName := '' ;
- V^.OK := FunktionHolen(Pb,TRUE,FALSE) ;
- END ;
-
- END ;
- END (* IF *) ;
- END ;
-
- UpdateMenus(Pb,2) ;
- UpdateMenus(Pb,3) ;
- UpdatePb(Pb) ;
- V^.NeuBerechnen := TRUE ;
- V^.Ausstieg := TRUE ;
-
-
- LOOP
- IF V^.Ausstieg THEN
- ClearBitMap(Pb) ;
- IF Pb^.Kasten THEN KastenZeichnen(Pb) ; END ;
- IF Pb^.Achsen THEN
- XAchseZeichnen(Pb) ; YAchseZeichnen(Pb) ; ZAchseZeichnen(Pb) ;
- RestXAchseZeichnen(Pb); RestYAchseZeichnen(Pb) ;
- END ;
- IF Pb^.Raster THEN RasterZeichnen(Pb) ; END ;
- IF Pb^.Beschriftung THEN BeschriftungZeichnen(Pb) ; END ;
- IF Pb^.FSchreiben THEN FunktionReinSchreiben(Pb,FALSE) ; END ;
-
- Zeichnen ;
-
- IF (NOT V^.Ausstieg) AND (NOT V^.Ende) THEN
- IF Pb^.Raster THEN RestRaster(Pb) ; END (* IF *) ;
- IF Pb^.Achsen THEN
-
- RestXAchseZeichnen(Pb) ; RestYAchseZeichnen(Pb) ;
- END (* IF *) ;
- END ;
- END (* IF *) ;
-
- IF (NOT V^.Ausstieg) AND (NOT V^.Ende) THEN
- DosL.Delay(2) ;
- CheckMessage ;
- END ;
-
- IF V^.Ende THEN
- EXIT ;
- END ;
- END (* LOOP *) ;
-
-
- CLOSE
-
- IF Pb # NIL THEN
- IF Pb^.Screen # NIL THEN
- ScreenWeg(Pb^.Screen) ;
- END ;
- CleanUp(Pb) ;
- END ;
- IF Pb # NIL THEN FreeMem(Pb,SIZE(PlotBase)) ; Pb := NIL ; END ;
- IF V # NIL THEN FreeMem(V,SIZE(Variablen)) ; V := NIL ; END ;
-
- END Plot.MOD
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-